package hxy.bytecode.baidu;

import java.util.Stack;

/**
 * @author eric
 * @date 2021/1/24
 */
public class SolutionIris {

    public static void main(String[] args) {
//        配对的有多少，最大嵌套层次。
        String string = "asd(A)SDF)()AS(AS(F)()()(()AS(F)AS*F)AS*G)AS(F)AS(F)";
        // 小于O(n)的算法
        // 栈？ 栈达到的最大高度就是最深的层次（这个是无关的）。配对的有效长度才是嵌套层次。
        // (((   )))
        int value = 0;
        int maxLength = 0;
        int currentLength = 0;
        boolean isContinue = false;
        // 有效的长度？
        Stack<Character> characters = new Stack<>();
        for (int i = 0; i < string.length(); i++) {
            char c = string.charAt(i);
            if (c == '(') {
                // 拿到栈顶数据是啥
                characters.push(c);
                isContinue = false;
            } else if (c == ')') {

                Character peek = characters.pop();
                if (peek != null) {
                    // 有效的
                    value++;

//           连续出栈次数有关系         有问题？(()(()))
                    if (isContinue == true) {
                        currentLength++;
                    }
                    isContinue = true;
                }
                if (characters.isEmpty()) {
                    // 把获取的，与最大比较
                    if (currentLength > maxLength) {
                        maxLength = currentLength;
                    }
                    currentLength = 0;
                }
            }


        }
        System.out.println(value);
        System.out.println(maxLength);

    }

}
